With computer processors getting smaller and cheaper, and computer programs getting larger and more complex, the size and cost of a computer's memory for storing program information has become a significant portion of the cost of a computer solution. While memory cost is important in general purpose computer systems, such as personal computers, it becomes critical in embedded special-purpose computer devices, especially those used in low-cost products. Significant cost reductions in computer-based products may be realized by reducing the memory required by a particular program. One possible technique involves compressing the program instructions in memory.
In order to use compressed programs, program instructions within the memory may be grouped into blocks and each block compressed by techniques well known in the art. For example, see "Elements of Information Theory, T. Cover & T. Thomas, Wiley & Sons, New York (1991). In the prior art, whenever processor 102, shown in FIG. 1, wishes to execute the instructions in a particular block, other program instructions are executed that read the block from memory, decompress it and temporarily store it while the instructions are executed.
This solution has several problems. It involves a serious performance penalty. Furthermore, it requires modifications to be made to the computer system. In particular, the tools used to program the processor, such as, compilers, linkers, editors and debuggers, must be modified. The problem with this is the high cost of recreating the tools for the new computer software structure. A need arises for a technique that allows a computer program to occupy less space, while allowing the changes to the program to be transparent to the computer and its supporting tools.